
;(function($, window, document, undefined) {
	
	var isAdd = true,//操作状态
		aClassroom = [],//教室列表
		aTeacher = [],//教职工数组
		aGetTeacherList_noSatff = [],//无职务教职工
		aClassList = [],//班级列表
		aClassGroup = [];//科目数据
	$.extend({
		//初始化所有方法
		initPage:function(){
			//获取年级列表
			$.getGradeList();
			
			//获取教职工列表
			$.getTeacherList();
			
			//获取没有职务的老师列表
//			$.goClass_noSatff_getTeacherList();
			
			//获取科目表
			$.getClassGroupList();
						
						
			//监听年级列表change事件
			$.GradeListEvent();
			
			//监听必修定位表更新，新增
			$.Must_table_save();
			
			//选修.......
			
			//监听新增，更新选修定位表事件
			$.noMust_table_save();
			
			//监听老师下拉框change事件
			$.teacherEvent();
		},
		/*
		 返回列表，渲染为下拉菜单
		 @param aData {array} 列表数据
		 @param container {object} 下拉菜单select元素对象界节点  jq
		 * */
		getSelectList:function(aData,container){
			container.find("option").remove();
			$.each(aData, function(i,v) {
				var sOption = '<option value="'+ v.id +'">'+ v.name +'</option>';
				container.append($(sOption));
			});
		},
		//初始化必修表格
		must_initTable:function(){
			//获取班级列表
			$.getClassList();
		},
		//获取班级列表
		getClassList:function(){
			fnAjax.method_4(
				url_join("class/list"),
				{grade_id:$("#grade").val()},
				"post",
				function(data) {
					console.log("班级",data.data);
					if(data.data.length < 1){
						layer.alert("该年级还没有初始化班级数据，请到“资料管理》学校内部架构管理》班级列表” 模块，创建科组数据！");						
					}else{
						aClassList = data.data;
						
						//创建班级单元以及主要单元格子
						$.createClassTd(aClassList);
					}
					
				}
			);
		},
		
		//单元格添加绑定班级科组id
		addProp:function(){
			$(".teacherTd").each(function(){
				$(this).attr({
					"data-class":$(this).siblings(".classTd").attr("data-id"),
					"data-class-group":$("#table th").eq($(this).index()).attr("data-id")
				});
			});
		},
		
		//获取年级列表
		getGradeList:function(){
			fnAjax.method_4(
				url_join("grade/list"),
				{},
				"post",
				function(data) {					
					console.log(data);
					if(data.data.length > 0){
						$("#grade").find("option").remove();
						$.each(data.data, function(i,v) {
							if(v.type == 1){
								var sOption = '<option value="'+ v.id +'" data-type="'+ v.type +'">'+ v.name +'</option>';
							}
							$("#grade").append($(sOption));
						});
					}
					else{
						layer.alert("该年级还没有初始化走班制年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建走班制年级数据！");
					}
					
				}
			);
		},
		//监听年级列表change事件
		GradeListEvent:function(){
			$("#grade").on("change",function(){
				//初始化必修表格，获取班级列表，渲染表头科组，表中班级，教职工信息
				$.must_initTable();
				
				//渲染选修列表结构
				$.noMust_createTbody();
			});
		},		
		//获取科目表
		getClassGroupList: function() {
			fnAjax.method_4(
				url_join("class-group/list"), {},
				"post",
				function(data) {
					console.log(data);
					aClassGroup = data.data;
					
					setTimeout(function(){
						//将科目渲染在必修表表头
						$.Must_classGroup(aClassGroup);
						
						//获取选修课的走班定位表的科目，并渲染表头
						$.noMust_classGroup(aClassGroup);
					},500);
					
				}
			);
		},
		//获取科组列表，根据各种条件渲染表格
		loadTable:function(){
			var aRequired = [];//必修课数组
			$.each(aClassGroup, function(i,v) {
				if(v.type == "1"){
					aRequired.push(v);
				}
			});
			//加载走班科组
			if($("#grade").find("option:selected").attr("data-type") == "1"){
				$.getSelectList(aRequired,$("#class-group"));
			}
			//加载非走班科组
			else{
				$.getSelectList(aClassGroup,$("#class-group"));
			}
			setTimeout(function(){
				layerLoad = layer.load(3);	
				$("#class-group").find("option").attr("selected","selected");
				$.initTable();//初始化表格（头部科组，行班级）
			},200);
			
		},
		//初始化表格（头部科组，行班级）
		initTable:function(){				
			//获取科目
			var aClass_group = [];
			$("#class-group option:selected").each(function(){
				aClass_group.push({
					name:$(this).text(),
					id:$(this).attr("value")
				})
			});
			//创建表格单元头部
			$.Must_classGroup(aClass_group);
			//创建表格tbody
			setTimeout(function(){
				$.createTbody();	
			},200);
		},		
		/**
		 * 渲染必修科目表头
		 * @param {array} aData 科组数据	 
		 * */
		Must_classGroup:function(aData){
			
			//走班必修课定位表
			if($("#grade option").length > 0){
				$(".classGroupTh").remove();			
				var sTh = "";
				$.each(aData, function(i,v) {
					if(v.type == 1){
						sTh += '<th class="classGroupTh" data-id="'+ v.id +'"><span class="classGroupSpan">'+ v.name +'</span></th>';
					}
				});
				$("#table thead th:nth-child(2)").after($(sTh));
				if($("#table thead th.classGroupTh").length == 0){
					layer.alert("该学校还没初始化必修科组数据，请到“资料管理》学校内部架构管理》科组列表” 模块，创建必修科组数据！");
				}
				//初始化必修表格，获取班级列表，渲染表头科组，表中班级，教职工信息
				$.must_initTable();
			}
			else{
//				layer.alert("该年级还没有初始化年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建年级数据！");
			}
		},
		//获取班级列表,并渲染行
		createTbody:function(){
			//获取班级列表,并渲染行
			fnAjax.method_4(
				url_join("class/list"),
				{grade_id:$("#grade").val()},
				"post",
				function(data) {
					console.log(data);
					$.createClassTd(data.data);
				}
			);
		},
		
		
		/*
		 渲染必修班级序号
		 @param data {array} 班级列表		
		 * */
		createClassTd:function(data){
			$("#table tbody tr").remove();
			if(data.length == 0){
				layer.alert("该年级还没有初始化班级数据，请到“资料管理》学校内部架构管理》班级列表” 模块，创建班级数据！");	
				return false;
			}
			var thLength = ($("#table thead th").length) - 1;
			var tds = "";
			for(var k=0;k<thLength;k++){
				tds += '<td class="teacherTd"><select class="teacherList form-control show-tick"></select></td>';
			}
			setTimeout(function(){
				$.each(data, function(i,v) {
					var sTd = '<tr class="text-c" data-class-id="'+ v.id +'"><td class="classTd" data-id="'+ v.id +'">'+ v.name +'</td>'+ tds +'</tr>';
					$("#table tbody").append($(sTd));
				});
				$.getTeacher(aTeacher,$(".teacherList"),true);
				
				//单元格添加绑定班级科组id
				$.addProp();
				
			},200);
		},
		/**
		 * 给表格单元插入下拉菜单
		 * @param {Array} aTeacher 教职工数据
		 * @param {Object} container 加载教职工数据的jq选择器（下拉菜单）
		 * @param {Boolean} isMust 判别是否必须的定位表的值
		 * */
		getTeacher:function(aTeacher,container,isMust){	
			$.createMulSelect(aTeacher,container,isMust);
			$(".gradeLabel").text($("#grade").find("option:selected").text());
		},
		//获取教职工列表
		getTeacherList:function(){
			fnAjax.method_4(
				url_join("course/staff"),
				{},
				"post",
				function(data){
					console.log("教职工数据",data);
					aTeacher = data.data;
				}
			);
		},
		/*
		 渲染多功能下拉菜单
		@data {array} 主要数据
		@param container {object} 下拉菜单select元素对象界节点  jq
		 * */
		createMulSelect:function(data,container,isMust){
			if($("#grade option").length == 0){
				layer.alert("该学校还没初始化走班年级数据，请到“资料管理》学校内部架构管理》年级列表” 模块，创建走班年级数据！");
				return false;
			}
			container.html("");
			if(container.attr("class") == "teacherList form-control show-tick"){
				container.append($('<option value="0">请选择教职工</option>'));
			}
			
			$.each(data, function(i,v) {
				var optgroup = '<optgroup label="'+ v.name +'"  data-id="'+ v.id +'">'+
					           		createOption(v.staff) +
					           '</optgroup>';
				container.append($(optgroup));
			});
			
			/*
			 创建option
			 @param {array} arr staff数组
			 @return {string} 
			 * */
			function createOption(arr){
				var options = "";
				$.each(arr, function(k,e) {
					options += '<option value="'+ e.id +'" style="font-weight: normal;color: blue;">'+ e.username +'</option>';
				});
				return options;
			}
			
			isMust ? $.showPositionTable($("#grade").val()) : $.noMust_table_show();

			
		},
		
		
		/*
		 获取老师绑定的班级，年级，科目id数据
		 @param {object} conatiner td的DOM对象（jq）
		 * */
		personalData:function(conatiner){
			var aTeacher= [];
			if($(".btn-save").attr("data-type") == "update"){
				conatiner.each(function(i,v){
					$(this).find("option:selected").attr("selected","selected");
					aTeacher.push({
						id:$(this).attr("data-id"),
						person_id:$(this).find("option:selected").attr("value"),//教职工id
						person_name:$(this).find("option:selected").text(),//教职工名字
						class_id:$(this).parent("tr").attr("data-class-id"),//班级id
						class_name:$(this).parent("tr").children("td:first-child").text(),//班级名称
						class_group_id:$("#table th").eq($(this).index()).attr("data-id"),//科目id
						class_group_name:$("#table th").eq($(this).index()).text()//科目名称
					});
				});
			}
			else{
				conatiner.each(function(i,v){
					$(this).find("option:selected").attr("selected","selected");
					aTeacher.push({
						person_id:$(this).find("option:selected").attr("value"),//教职工id
						person_name:$(this).find("option:selected").text(),//教职工名字
						class_id:$(this).parent("tr").attr("data-class-id"),//班级id
						class_name:$(this).parent("tr").children("td:first-child").text(),//班级名称
						class_group_id:$("#table th").eq($(this).index()).attr("data-id"),//科目id
						class_group_name:$("#table th").eq($(this).index()).text()//科目名称
					});
				});
			}
			console.log("提交的主要数据：",aTeacher);
			return aTeacher;
		},
		//新增和更新
		Must_table_save:function(){
			$(".btn-save").on("click",function(){
				//保存到后台的定位表格html片段
				var sHtml = $(".tableBox").html();
				//添加定位表
				if($(this).attr("data-type") == "create"){
					var oData = {
						gid:$("#grade").val(),//年级id
						content:sHtml,//表格html片段
						course_v1:$.personalData($(".teacherTd")),//主要提交数据
					};
					fnAjax.method_4(
						url_join("course-v1/create"),
						oData,
						"post",
						function(data){
							layer.msg("操作成功",{time:1000},function(){
								window.location.reload();
							});
							
						}
					);
				}
				//更新定位表
				else{
					var oData = {
						gid:$("#grade").val(),//年级id
						content:sHtml,//表格html片段
						course_v1:$.personalData($(".changeTd")),//主要提交数据
					};
					console.log("要更新的数据",oData.course_v1);
					fnAjax.method_4(
						url_join("course-v1/update"),
						oData,
						"post",
						function(data){
							layer.msg("操作成功",{time:1000},function(){
								window.location.reload();
							});
						}
					);
				}
			});
		},

		
		/*
		 * 获取定位表
		 @param {number} gid 
		 * */
		showPositionTable:function(gid){
			fnAjax.method_4(
				url_join("course-v1/show"),
				{"gid":gid},
				"post",
				function(data){
					console.log(data);
					if(data.data.length > 0){
						//回显查询定位表的数据
						$.back_show_table(data.data);
						
						$(".btn-save").attr("data-type","update");
					}
					else{
						$(".btn-save").attr("data-type","create");
					}
					//调用插件select
					$.selectPlugIn($(".teacherList"));
					//监听科目下拉框
					$.classGroupSelectEvent();
					//更新状态的时候监听下拉老师菜单的是否发生值改变
					$.goClass_teacherListEvent();
				}
			);
		},
		//监听科目下拉框
		classGroupSelectEvent:function(){
			$(".teacherList").each(function(){
				$(this).attr("data-init",$(this).val());
			});
			$("body").on("change",".teacherList",function(){
				$(this).find("option:selected").attr("selected","selected");
				if($(this).find("option:selected").attr("value") == $(this).attr("data-init")){
					$(this).parents("td").removeClass("changeTd");
				}else{
					$(this).parents("td").addClass("changeTd");
				}
			});
		},
		//更新状态的时候监听下拉老师菜单的是否发生值改变(多选下拉框)
		goClass_teacherListEvent:function(){
			if($(".btn-save-noMust").attr("data-type") == "update"){
				console.log("update，监听教职工变化")
				$(".noMust_teacherList").each(function(){
					$(this).attr("data-init",($(this).val() == null ? "null" : $(this).val()));
				});
				$("body").on("change",".noMust_teacherList",function(){
					console.log($(this).val());
					$(this).find("option:selected").attr("selected","selected");
					var v = $(this).val();
					if(v != null && v.length > 0){
						v = v.join(",");
						console.log("转化后的值：",v);
					}
					
					if($(this).attr("data-init") && v == $(this).attr("data-init")){
						$(this).parents("td").removeClass("changeTd");
					}else{
						$(this).parents("td").addClass("changeTd");
					}
				});
			}
			
		},
		//回显查询定位表的数据
		back_show_table:function(aData){
			$.each(aData, function(i,v) {
				$(".teacherTd").each(function(){
					if($(this).attr("data-class") == v.class_id && $(this).attr("data-class-group") == v.class_group_id){
						$(this).attr("data-id",v.id).find("select").val(v.staff_id);
					}
				});
			});
		},
		//监听老师列表下拉框切换事件
		teacherEvent:function(){
			$("body").on("change",".teacherList",function(){
				$(this).find("option:selected").attr("selected","selected");				
			});
		},
		//获取选修课的走班定位表的科目
		noMust_classGroup:function(aClassGroup){
			
			var th = "";
			$.each(aClassGroup, function(i,v) {
				if(v.type == 0){
					th += '<th class="td-classGroup" data-id="'+ v.id +'" >'+ v.name +'</th>';
				}
			});
			$("#noMust_table thead tr").append($(th));
			
			//渲染选修列表结构
			$.noMust_createTbody();
		},
		//渲染选修列表结构
		noMust_createTbody:function(){
			if($("#noMust_table thead tr th.td-classGroup").length == 0){
				layer.alert("该学校还没初始化选修科组数据，请到“资料管理》学校内部架构管理》科组列表” 模块，创建选修科组数据！");
				return false;
			}
			
			$("#noMust_table tbody tr").remove();
			var len = $("#noMust_table thead th").length;	
			var tds = ""; 
			for(var i=0;i<len;i++){
				tds += '<td class="td-noMust"><select class="noMust_teacherList form-control" multiple style="min-height:300px;"  data-dropup-auto="true"></select></td>'
			}
			$("#noMust_table tbody").html('<tr class="text-c">'+ tds +'</tr>');
			//选修表单元新增教室和科目属性
			$.noMust_addProp();
		},
		//获取没有职务的老师列表
		goClass_noSatff_getTeacherList:function(){
			fnAjax.method_4(
				url_join("common/staff/list"), {},
				"post",
				function(data) {
					//存储无职务的教职工列表
					aGetTeacherList_noSatff = data.data;
				}
			);
		},
		/**
		 * 渲染无职务的教职工列表下拉菜单
		 * @param {Array} aGetTeacherList_noSatff 无职务的教职工列表
		 * @param {Object} container 下拉菜单选择器
		 * */
		noStaff_createSelect:function(aGetTeacherList_noSatff,container){
			container.find("option");
			$.each(aGetTeacherList_noSatff, function(k, e) {
				var options = '<option value="' + e.id + '" style="font-weight: normal;color: blue;" class="staffOption">' + e.username + '</option>';
				container.append($(options));
			});
			
		},
		//获取教室列表
		getClassroomList: function() {
			fnAjax.method_4(
				url_join("classroom/list"), {},
				"post",
				function(data) {
					console.log(data);
					aClassroom = data.data;		
					
				}
			);
		},
		//选修表单元新增教室和科目属性
		noMust_addProp:function(){
			$("#noMust_table .td-noMust").each(function(){
				$(this).attr({
					"data-classgroup":$("#noMust_table thead th").eq($(this).index()).attr("data-id")//科组属性id
				});
			});
			//给表格单元插入下拉菜单（有职务）
			$.getTeacher(aTeacher,$(".noMust_teacherList"),false);
			
			
//			//查看选修定位表
//			$.noMust_table_show();
		},
		
		//新增，更新选修定位表
		noMust_table_save:function(){
			$(".btn-save-noMust").on("click",function(){
				if($(this).attr("data-type") == "update"){
					fnAjax.method_4(
						url_join("course-v2/update"),
						{
							gid:$("#grade").val(),
							course_v2:$.noMust_table_getData()
						},
						"post",
						function(data){
							layer.msg("操作成功",{time:1000},function(){
								window.location.reload();
							});
							
						}
					);
				}else{
					
					fnAjax.method_4(
						url_join("course-v2/create"),
						{
							gid:$("#grade").val(),
							course_v2:$.noMust_table_getData()
						},
						"post",
						function(data){
							layer.msg("操作成功",{time:1000},function(){
								window.location.reload();
							});
						}
					);
				}
				
				
			});
		},
		//获取选修定位表数据
		noMust_table_getData:function(){
			var mainData = [];
			if($(".btn-save-noMust").attr("data-type") == "update"){
				$(".td-noMust.changeTd").each(function(){
					if($(this).find("select").val()){
						mainData.push({
							class_group_id:$(this).attr("data-classgroup"),
							staff_id:$(this).find("select").val()
						})
					}else if($(this).find("select").val() == null || $(this).find("select").val() == ""){
						mainData.push({
							class_group_id:$(this).attr("data-classgroup"),
							staff_id:["0"]
						})
					}
				});
			}else{
				$(".td-noMust").each(function(){
					if($(this).find("select").val()){
						mainData.push({
							class_group_id:$(this).attr("data-classgroup"),
							staff_id:$(this).find("select").val()
						})
					}
				});
			}
			
			return mainData;
		},
		//查看选修定位表
		noMust_table_show:function(){
			
			fnAjax.method_4(
				url_join("course-v2/show"),
				{
					gid:$("#grade").val()
				},
				"post",
				function(data){
					console.log(data.data);
					if(data.data.length && data.data.length > 0){
						$(".btn-save-noMust").attr("data-type","update");
						$.each(data.data, function(i,v) {
							v.staff_id = JSON.parse(v.staff_id);
						});
						$(".td-noMust").each(function(i){
							var _this = $(this);
							$.each(data.data, function(k,v) {
								if(_this.attr("data-classgroup") == v.class_group_id){
									_this.find("select").attr("data-value",v.staff_id).val(v.staff_id);
								}
							});
						});
						
					}else{
						$(".btn-save-noMust").attr("data-type","create");
					}
					//调用插件select
					$.selectPlugIn($(".noMust_teacherList"));
					
					//控制长度过长的表格左右平移显示的插件
					$.better_show_tables(				
						$("#noMust_table"),
						$(".btn-toLeft"),
						$(".btn-toRight")
					);
				}
			);
		},
		//调用插件select
		selectPlugIn:function(selector){
			selector.attr({
				"data-live-search":true,
//				"data-live-search-placeholder":"Search",
//				"data-actions-box":true
			});
			selector.selectpicker({});
			
			$(".teacherList").each(function(){
				if($(this).find("option").length == 1){
					layer.alert("该学校还没有初始化教职工数据，请到“资料管理》教职工管理” 模块，创建教职工数据！");
				}
			});
			
			$(".noMust_teacherList").each(function(){
				if($(this).find("option").length == 0){
					layer.alert("该学校还没有初始化教职工数据，请到“资料管理》教职工管理” 模块，创建教职工数据！");
				}
			});
		},
		
		
		/**
		 * 控制长度过长的表格左右平移显示的插件
		 * @param {Object} oTable 主要表格选择器jq
		 * @param {Object} oLeftBtn 操作表格左平移的选择器按钮
		 * @param {Object} oRightBtn 操作表格右平移的选择器按钮
		 * */
		better_show_tables:function(oTable,oLeftBtn,oRightBtn){
			var nBodyWidth = $("body").width();
			var nTableWidth = oTable.width();
			var maxLeft = nTableWidth - nBodyWidth;//最大
			var nSpeed = maxLeft/5;//速度
			var minLeft = 0;//最小
			//初始化表格位置		
			oTable.css({
				"position":"absolute",				
				"left":minLeft
			});
			//向左平移
			oLeftBtn.on("click",function(){
				if(oTable.position().left > (-maxLeft - 20)){
					oTable.animate({left:"-="+ nSpeed +"px"},100);
					
					oLeftBtn.attr("disabled","disabled");
					var timer = setTimeout(function(){
						oLeftBtn.removeAttr("disabled");
						clearTimeout(timer);
					},100);
				}
				else{
					layer.msg("到头啦");
				}
			});
			//向右平移
			oRightBtn.on("click",function(){
				if(oTable.position().left < minLeft  ){
					oTable.animate({left:"+="+ nSpeed +"px"},100);
					
					oRightBtn.attr("disabled","disabled");
					var timer = setTimeout(function(){
						oRightBtn.removeAttr("disabled");
						clearTimeout(timer);
					},100);
				}else{
					layer.msg("到头啦");
				}
			});
		}
	});
})(jQuery, window, document);